#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QWidget>
#include <QPushButton>
#include <QGridLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <ros/ros.h>
#include <QTime>
#include "ui_mainwindow.h"
#include "qobject.h"
#include "qdebug.h"
#include "QTimer"
#include <QThread>
#include "std_msgs/String.h"
#include <qthread.h>
#include <QStringListModel>

using namespace cv;
using namespace std;

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  explicit MainWindow(ros::NodeHandle *node,QWidget *parent = nullptr);
  ~MainWindow() override;

    QWidget *widget;
    QVBoxLayout *vbox;
    QVBoxLayout *vbox1;
    QLabel *label1;
    QLabel *label1_1;
    QLabel *label1_2;
    QLabel *label1_3;
    QLabel *label1_4;
    QLabel *label1_5;
    QLabel *label1_6;
    QLabel *label1_7;

    QLabel *label2_1;
    QLabel *label2_2;
    QLabel *label2_3;
    QLabel *label2_4;
    QLabel *label2_5;
    QLabel *label2_6;
    QLabel *label2_7;

    QLabel *label3_1;
    QLabel *label3_2;
    QLabel *label3_3;
    QLabel *label3_4;
    QLabel *label3_5;
    QLabel *label3_6;
    QLabel *label3_7;

    QLabel *label1_1_2;
    QTimer *timer1;
    QLabel *label1_2_2;
    QTimer *timer2;
    QLabel *label1_3_2;
    QTimer *timer3;


    QLabel *label1_4_2;
    QLabel *label1_5_2;
    QLabel *label1_6_2;
    QLabel *label1_7_2;
    QLabel *label2_1_2;
    QLabel *label2_2_2;
    QLabel *label2_3_2;
    QLabel *label2_4_2;
    QLabel *label2_5_2;
    QLabel *label2_6_2;
    QLabel *label2_7_2;
    QLabel *label3_1_2;
    QLabel *label3_2_2;
    QLabel *label3_3_2;
    QLabel *label3_4_2;
    QLabel *label3_5_2;
    QLabel *label3_6_2;
    QLabel *label3_7_2;

    QHBoxLayout *hbox1;
    QVBoxLayout *vbox1_1;
    QVBoxLayout *vbox1_1_2;
    QVBoxLayout *vbox1_2;
    QVBoxLayout *vbox1_2_2;
    QVBoxLayout *vbox1_3;
    QVBoxLayout *vbox1_3_2;

    QVBoxLayout *vbox2;
    QLabel *label2;
    QLabel *label4_1;
    QLabel *label4_2;
    QLabel *label4_3;
    QLabel *label4_4;
    QLabel *label4_5;
    QLabel *label4_6;
    QLabel *label4_7;
    QLabel *label4_8;

    QLabel *label5_1;
    QLabel *label5_2;
    QLabel *label5_3;
    QLabel *label5_4;
    QLabel *label5_5;
    QLabel *label5_6;
    QLabel *label5_7;
    QLabel *label5_8;

    QLabel *label6_1;
    QLabel *label6_2;
    QLabel *label6_3;
    QLabel *label6_4;
    QLabel *label6_5;
    QLabel *label6_6;
    QLabel *label6_7;
    QLabel *label6_8;


    QLabel *label7_1;
    QLabel *label7_2;
    QLabel *label7_3;
    QLabel *label7_4;
    QLabel *label7_5;
    QLabel *label7_6;
    QLabel *label7_7;
    QLabel *label7_8;

    QLabel *label4_1_2;
    QLabel *label4_2_2;
    QLabel *label4_3_2;
    QLabel *label4_4_2;
    QLabel *label4_5_2;
    QLabel *label4_6_2;
    QLabel *label4_7_2;
    QLabel *label4_8_2;

    QLabel *label5_1_2;
    QLabel *label5_2_2;
    QLabel *label5_3_2;
    QLabel *label5_4_2;
    QLabel *label5_5_2;
    QLabel *label5_6_2;
    QLabel *label5_7_2;
    QLabel *label5_8_2;

    QLabel *label6_1_2;
    QLabel *label6_2_2;
    QLabel *label6_3_2;
    QLabel *label6_4_2;
    QLabel *label6_5_2;
    QLabel *label6_6_2;
    QLabel *label6_7_2;
    QLabel *label6_8_2;

    QLabel *label7_1_2;
    QLabel *label7_2_2;
    QLabel *label7_3_2;
    QLabel *label7_4_2;
    QLabel *label7_5_2;
    QLabel *label7_6_2;
    QLabel *label7_7_2;
    QLabel *label7_8_2;

    QHBoxLayout *hbox2;

    QVBoxLayout *vbox2_1;
    QVBoxLayout *vbox2_1_2;

    QVBoxLayout *vbox2_2;
    QVBoxLayout *vbox2_2_2;

    QVBoxLayout *vbox2_3;
    QVBoxLayout *vbox2_3_2;

    QVBoxLayout *vbox2_4;
    QVBoxLayout *vbox2_4_2;

    QGridLayout *grid2;

    QLabel *label8_1;
    QLabel *label8_2;
    QLabel *label8_3;
    QLabel *label8_4;
    QLabel *label8_5;
    QLabel *label8_6;
    QLabel *label8_7;
    QLabel *label8_8;
    QLabel *label8_9;

    QLabel *labelVideo;
    VideoCapture cap;
    Mat src_image;

    QTimer *timeVideo;
    QImage imag_null;

    ros::Subscriber subscriber;
    ros::NodeHandle *node;

private:
    ros::Subscriber sub;
private:
  Ui::MainWindow *ui;
private slots:
    void updateTime() const;

    void updateNum() const;

    void readFrame();


    void onUpdate();

    void topicCallback(const std_msgs::String_<allocator<void>>::ConstPtr &msg) const;
};

#endif // MAINWINDOW_H
